#pragma once

#include <SDL.h>

enum class ItemType:uint8_t
{
    Life,
    Shield,
    Time
};

struct Player
{
    // 飞机纹理
    SDL_Texture* texture = nullptr;
    // 飞机坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 飞机速度
    Uint16 speed{300};
    // 上一次的发射时间
    Uint32 lastShootTime{0};
    // 最大生命值
    Uint16 maxHealth{3};
    // 生命值
    Uint16 health{maxHealth};
};

struct Projectile
{
    // 子弹纹理
    SDL_Texture* texture = nullptr;
    // 子弹坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 子弹速度
    Uint16 speed{300};
    // 子弹 cd /毫秒
    Uint32 cooldown{300};
    // 伤害
    Uint16 damage{1};
};

struct Enemy
{
    // 飞机纹理
    SDL_Texture* texture = nullptr;
    // 飞机坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 飞机速度
    Uint16 speed{100};
    // 上一次的发射时间
    Uint32 lastShootTime{0};
    // 生命值
    Uint16 health{2};
};

struct EnemyProjectile
{
    // 子弹纹理
    SDL_Texture* texture = nullptr;
    // 子弹坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 子弹速度
    Uint16 speed{300};
    // 子弹 cd /毫秒
    Uint32 cooldown{2000};
    // 运动方向
    SDL_FPoint direction{};
    // 伤害
    Uint16 damage{1};
};

struct Explosion
{
    // 爆炸纹理
    SDL_Texture* texture = nullptr;
    // 爆炸坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 当前显示的帧索引
    int currentFrame = 0;
    // 动画的总帧数
    int totalFrame = 0;
    // 动画开始时间
    Uint32 startTime = 0;
    // 动画帧率(每秒播放帧数)
    Uint32 FPS = 10;
};

struct Item
{
    // 道具纹理
    SDL_Texture* texture = nullptr;
    // 道具坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 道具类型
    ItemType type{};
    // 反弹次数
    int bounceCount{3};
    // 移动速度
    int speed{200};
    // 移动方向
    SDL_FPoint direction{};
};

struct Background
{
    // 背景纹理
    SDL_Texture* texture = nullptr;
    // 背景坐标
    SDL_FPoint position{};
    // 纹理宽度
    int width{};
    // 纹理高度
    int height{};
    // 偏移值
    float offset{0};
    // 移动速度
    int speed{30};
};